{
 "cells": [
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. _nb_crossover:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Crossover"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. _nb_crossover_sbx:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Simulated Binary Crossover ('real_sbx', 'int_sbx')\n",
    "\n",
    "Details about the crossover can be found in <cite data-cite=\"sbx\"></cite>. Real values can be represented by a binary notation and then a the point crossovers can be performed. SBX simulated this operation by using a probability distribution *simulating* the binary crossover.\n",
    "\n",
    "A crossover object can be created by "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pymoo.factory import get_crossover\n",
    "\n",
    "crossover = get_crossover(\"real_sbx\", prob=0.9, eta=20)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As arguments, the probability of a crossover and the *eta* parameter can be provided.\n",
    "\n",
    "In the example below, we demonstrate a crossover in an optimization problem with only one variable. A crossover is performed between two points, *0.2* and *0.8*, and the resulting exponential distribution is visualized. Depending on the *eta_cross*, the exponential distribution can be fine-tuned.\n",
    "\n",
    "The probability of SBX follows an exponential distribution. Please note for demonstration purposes, we have set *prob_per_variable=1.0*, which means every variable participates in the crossover (necessary because there exists only one variable). However, it is suggested to perform a crossover of two variables forms each parent with a probability of *0.5*, which is defined by default if not defined otherwise."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 248,
       "width": 372
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from pymoo.interface import crossover\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def show(eta_cross):\n",
    "    a,b = np.full((5000, 1), 0.2), np.full((5000, 1), 0.8)\n",
    "    off = crossover(get_crossover(\"real_sbx\", prob=1.0, eta=eta_cross, prob_per_variable=1.0), a, b)\n",
    "\n",
    "    plt.hist(off, range=(0,1), bins=200, density=True, color=\"red\")\n",
    "    plt.show()\n",
    "\n",
    "show(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 248,
       "width": 378
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "show(30)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Also, it can be used for integer variables. The bounds are slightly modified, and after doing the crossover, the variables are rounded."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 250,
       "width": 378
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from pymoo.factory import get_crossover\n",
    "from pymoo.interface import crossover\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def show(eta_cross):\n",
    "    a,b = np.full((50000, 1), -10), np.full((50000, 1), +10)\n",
    "    off = crossover(get_crossover(\"int_sbx\", prob=1.0, eta=eta_cross, prob_per_variable=1.0), a, b, xl=-20, xu=+20)\n",
    "    val, count = np.unique(off, return_counts=True)\n",
    "    #print(np.column_stack([val, count / count.sum()]))\n",
    "    plt.hist(off, range=(-20, 20), bins=41, density=True, color=\"red\")\n",
    "    plt.show()\n",
    "\n",
    "show(3)"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. _nb_crossover_point:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Point Crossover ('real_point', 'bin_point', 'int_point' )\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The point crossover is mostly applied to binary optimization problems. However, in general, it can be used for other variable representations. \n",
    "\n",
    "The point crossover can be initiated by"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "crossover = get_crossover(\"real_k_point\", n_points=2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For any number of points that are desired. Additionally, for convenience the \n",
    "single- or two-point crossover is created by"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<pymoo.operators.crossover.point_crossover.PointCrossover at 0x7faff6c849d0>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "get_crossover(\"real_one_point\")\n",
    "get_crossover(\"real_two_point\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "directly. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "One Point Crossover\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 264,
       "width": 265
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Two Point Crossover\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 264,
       "width": 265
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "K Point Crossover (k=4)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 264,
       "width": 265
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from pymoo.interface import crossover\n",
    "from pymoo.factory import get_crossover\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def example_parents(n_matings, n_var):\n",
    "    a = np.arange(n_var)[None, :].repeat(n_matings, axis=0)\n",
    "    b = a + n_var\n",
    "    return a, b\n",
    "    \n",
    "\n",
    "def show(M):\n",
    "    plt.figure(figsize=(4,4))\n",
    "    plt.imshow(M, cmap='Greys',  interpolation='nearest')\n",
    "    plt.xlabel(\"Variables\")\n",
    "    plt.ylabel(\"Individuals\")\n",
    "    plt.show()\n",
    "\n",
    "n_matings, n_var = 100, 100\n",
    "a,b = example_parents(n_matings,n_var)\n",
    "\n",
    "print(\"One Point Crossover\")\n",
    "off = crossover(get_crossover(\"bin_one_point\"), a, b)\n",
    "show((off[:n_matings] != a[0]))\n",
    "\n",
    "print(\"Two Point Crossover\")\n",
    "off = crossover(get_crossover(\"bin_two_point\"), a, b)\n",
    "show((off[:n_matings] != a[0]))\n",
    "\n",
    "print(\"K Point Crossover (k=4)\")\n",
    "off = crossover(get_crossover(\"bin_k_point\", n_points=4), a, b)\n",
    "show((off[:n_matings] != a[0]))"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. _nb_crossover_uniform:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Uniform Crossover ('real_ux', 'bin_ux', 'int_ux')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The uniform crossover takes with a probability of 0.5 the values from each parent. \n",
    "In contrast to a point crossover, not a sequence of variables is taken, but random indices."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 264,
       "width": 265
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "off = crossover(get_crossover(\"bin_ux\"), a, b)\n",
    "show((off[:n_matings] != a[0]))"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. _nb_crossover_half_uniform:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Half Uniform Crossover ('bin_hux', 'int_hux')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The half uniform crossover will first determine what indices are different in the first and the second parent. Then, it will take half of the difference to be selected from the other parent."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Here, a and b are different for indices:  [ 5 15 25 35 45 55 65 75 85 95]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 264,
       "width": 265
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Difference in bits (a to b): "
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " 1000\n",
      "Difference in bits (a to off):  450\n",
      "Crossover Rate:  0.45\n"
     ]
    }
   ],
   "source": [
    "_a = np.full((100,100), False)\n",
    "_b = np.copy(_a)\n",
    "_b[:, np.linspace(5, 95, 10).astype(np.int)] = True\n",
    "\n",
    "print(\"Here, a and b are different for indices: \", np.where(_a[0] != _b[0])[0])\n",
    "\n",
    "off = crossover(get_crossover(\"bin_hux\"), _a, _b)\n",
    "show((off[:100] != _a[0]))\n",
    "\n",
    "diff_a_to_b = (_a != _b).sum()\n",
    "diff_a_to_off = (_a != off[:100]).sum()\n",
    "\n",
    "print(\"Difference in bits (a to b): \", diff_a_to_b)\n",
    "print(\"Difference in bits (a to off): \", diff_a_to_off)\n",
    "\n",
    "print(\"Crossover Rate: \", diff_a_to_off / diff_a_to_b)\n",
    "\n"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. _nb_crossover_exponential:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Exponential Crossover ('real_exp', 'bin_exp', 'int_exp')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The exponential crossover is mostly a one-point crossover, but occasionally it can be a two-point crossover. \n",
    "First, randomly a starting index is chosen. Then, we add the next variable to be mutated with a specific probability. If we reach the last variable, we continue with the first (wrap around)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhIAAAIRCAYAAAAfqVQRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3deZxkVX338c9PUECUAQVcwATEAJOgzwODrLIniKiIAgbzGEURlyiI4L4SowaXsKiJPkEFtzygEFQiIiKbgEscIG4IIowIgggjg8gM6+/549yWoqjq7jl9u6ur6vN+vep1p+49Vff0nerub5/7u+dGZiJJklTjYYPugCRJGl4GCUmSVM0gIUmSqhkkJElSNYOEJEmqZpCQJEnVDBKSJKmaQUKSJFUzSEiSpGoGCUmSVM0gIUmSqhkkJElSNYOEJEmqZpCQJEnVxiZIRMSGEfGZiPhNRNwVEUsi4riIWGfQfZMkaVhFZg66D7MuIjYBLgHWB74K/BzYBtgNuBLYMTNvHVwPJUkaTuMyIvFvlBBxWGbum5lvzczdgWOBzYD3D7R3kiQNqZEfkWhGI64GlgCbZOb9HdseDdwIBLB+Zv5xIJ2UJGlIrTroDsyB3Zrl2Z0hAiAz/xARFwN7AtsB317ZN4+Ia4G1KEFFkqRhtBFwe2ZuvLIvHIcgsVmzvKrP9l9QgsSmVAQJYK011ljjMQsXLnxMTeckSRq0K664guXLl1e9dhyCxIJmuazP9on1a0/2JhGxuM+m1RcuXMjixf02S5I0vy1atIhLL710Sc1rx6XYUpIkzYJxGJGYGHFY0Gf7xPrbJnuTzFzUa30zUrFVXdckSRpu4zAicWWz3LTP9r9olv1qKCRJUh/jECTOa5Z7RsSDvt7m8s8dgTuB7811xyRJGnYjHyQy85fA2ZRLW17btfkfgTWBzzuHhCRJK28caiQA/oEyRfZHI2IP4ApgW8ocE1cB7xhg3yRJGlojPyIBfxqV2Bo4iRIgjgQ2AY4HtvM+G5Ik1RmXEQky89fAywbdD0maLREx6C5MatRvyTCuxmJEQpIkzQ6DhCRJqmaQkCRJ1camRkKSRp01CBoERyQkSVI1g4QkSapmkJAkSdWskdBD9LoW3XOvkqReHJGQJEnVDBKSJKmaQUKSJFUzSEiSpGoWW+ohLKyUNCzm043KxvVnpyMSkiSpmkFCkiRVM0hIkqRq1khoYObTuc02jOv5UWmQ/L4bPEckJElSNYOEJEmqZpCQJEnVrJHQwHhuU5KGnyMSkiSpmkFCkiRVM0hIkqRqBglJklTNYssR08YkTxZBSpKmyxEJSZJUzSAhSZKqGSQkSVI1ayRGjPUN80t3zYr/P5JGjSMSkiSpmkFCkiRVM0hIkqRq1khIs8iaCEmjzhEJSZJUzSAhSZKqGSQkSVI1g4QkSapmsaU0h9q4qRpYxClp/nBEQpIkVTNISJKkagYJSZJUzRoJaQ5Z2yBp1DgiIUmSqhkkJElSNYOEJEmqZpCQJEnVLLZUlbYmVpoNFjRK0txxREKSJFUzSEiSpGoGCUmSVM0aCVWpqUOYq7qKudqPtRiS5IiEJEmaAYOEJEmqZpCQJEnVrJHQvJ4TYjqsVZCkwXFEQpIkVTNISJKkagYJSZJUzSAhSZKqWWwpixWlIdVGobTf/5opRyQkSVI1g4QkSapmkJAkSdWskZCkIWV9g+YDRyQkSVI1g4QkSapmkJAkSdUMEpIkqZpBQpIkVTNISJKkagYJSZJUbaiCREQ8NiJeERGnR8TVEbE8IpZFxEURcXBE9Px6ImKHiDgzIpY2r/lRRBweEavM9dcgSdIoGbYJqQ4APgHcCJwHXAc8DngB8CngWRFxQHbM0hIRzwNOA1YApwBLgecCxwI7Nu8pSdVqbp7lZFIaFcMWJK4C9gG+npn3T6yMiLcDPwD2o4SK05r1awEnAPcBu2bmD5v17wLOBfaPiAMz8+Q5/SokSRoRQ3VqIzPPzcwzOkNEs/4m4JPN0107Nu0PrAecPBEimvYrgHc2T18zez2WJGm0DVWQmMI9zfLejnW7N8uzerS/ELgT2CEiVpvNjkmSNKpGIkhExKrAS5qnnaFhs2Z5VfdrMvNe4FrK6Z0nz2oHNZIiYqUfGk2ZudIPaVQMW41EP0cDWwBnZuY3O9YvaJbL+rxuYv3aU+0gIhb32bT5tHooSdIIGvoRiYg4DDgS+Dnw9wPujiRJY2WoRyQi4nXA8cDPgD0yc2lXk4kRhwX0NrH+tqn2lZmL+vRhMbDV1L2VJGn0DG2QiIjDKXNB/IQSIm7u0exKYGtgU+BBpyaauoqNKcWZ18xubzWKPM/d26BqQfz/kAZjKE9tRMRbKCHicmC3PiECylwRAHv12LYz8Ejgksy8q/1eSpI0+oYuSDSTSR1NGWHYIzNvmaT5qcAtwIERsXXHe6wOvK95+onZ6qskSaNuqE5tRMRLgfdSZqr8DnBYj2HUJZl5EkBm3h4Rh1ACxfkRcTJliux9KJeGnkqZNluSJFUYqiBBqWkAWAU4vE+bC4CTJp5k5lciYhfgHZQptFcHrgaOAD6anliVJKnaUAWJzDwKOKridRcDe7fdH0kPNRvZfDoFnN44SxqMoauRkCRJ84dBQpIkVTNISJKkakNVIyENkhMtDY7HQJq/HJGQJEnVDBKSJKmaQUKSJFWzRkKaJs/TS6OruwbK7/fpc0RCkiRVM0hIkqRqBglJklTNICFJkqpZbClJGnsWV9ZzREKSJFUzSEiSpGoGCUmSVM0aCWmaBnXTrl48nytpvnBEQpIkVTNISJKkagYJSZJUzRoJaZqsS5DUtl61V8P2s8YRCUmSVM0gIUmSqhkkJElSNYOEJEmqZrGlJEkDMmyFlb04IiFJkqoZJCRJUjWDhCRJqmaQkCRJ1QwSkiSpmkFCkiRVM0hIkqRqziMhSfNQr5s5dRuFOQg0/ByRkCRJ1QwSkiSpmkFCkiRVM0hIkqRqFltK0jxkIaWGhSMSkiSpmkFCkiRVM0hIkqRq1kiMGSe5kSS1yREJSZJUzSAhSZKqGSQkSVI1g4QkSapmseWYsZBSktQmRyQkSVI1g4QkSapmkJAkSdWskZBa0muyL2tSJI06RyQkSVI1g4QkSapmkJAkSdWskZBaYj3EeLAWRnowRyQkSVI1g4QkSapmkJAkSdUMEpIkqZrFlpK0EiyslB7MEQlJklTNICFJkqoZJCRJUjVrJCRJQ6N7QjBrVgbPEQlJklTNICFJkqoZJCRJUjVrJCRJQ8OaiPlnzkYkImKdiFhzrvYnSZJmX6tBIiL2iIgPRcQ6HevWj4gLgFuApRFxTJv7lCRJg9P2iMShwAsy8/cd6z4C7AT8ErgVeH1EvLDl/UqSpAFoO0j8L+CiiScRsQawP/CtzNwU2Az4NfDqtnYYES+OiGwer+jT5jkRcX5ELIuIOyLi+xHx0rb6IEnSuGo7SKwP/Kbj+bbA6sBJAJn5B+C/KIFixiLiScDHgTsmafM64AxgC+ALwAnAE4GTIuIjbfRDGgURMeVDkrq1HSTuAtboeL4TkMCFHetuBx4z0x1F+al2IuV0ySf7tNmIcmplKbB1Zr42M98API1yquXIiNh+pn2RJGlctR0krgV273i+H/CLzLyhY92TKIWXM3VYs6+XAX/s0+blwGrAxzNzycTKpobjA83T1k6zSJI0btoOEp8FntrUIHwHeCrwH11tngZcOZOdRMRC4Gjg+My8cJKmE6HmrB7bvtHVRpIkraS2J6T6BLAd8LdAUGoTPjixMSK2oISLd9fuICJWBT4PXAe8fYrmE7UYV3VvyMwbI+KPwIYR8cjMvLO2T9IoGPaJfnrVcAz71yQNg1aDRGbeA/xdRLy6PM0/dDW5CdgSWDKD3by7eY9nZObyKdouaJbL+mxfBqzZtJs0SETE4j6bNp+iD5IkjaxZmSI7M2/vs/4WZlAfERHbUkYh/iUzv1v7PpIkqR1Dc6+N5pTG5yinKd41zZctA9aljDjc2mP7VCMWf5KZi/r0azGw1TT7I0nSSJlRkIiIaypfmpm5yUq+5lHAps2/V/S5pv2EiDiBUoR5OKWoc93mdQ8awYiIJ1BOa1xvfYQ0/KyH0KiarTlc2vqememIxMMo80SsrJqjchfw6T7btqLUTVxECQ8ToeFcYEdgL7qCBPCsjjaSJKnCjIJEZm7UUj+ms6/lQL8psI+iBInPZuanOjadCLwZeF1EnDgxl0RzU7GJKz56TmYlSZKmNjQ1EjUy89qIeBPwUeCHEXEKcDfl/h8bYtGmJEkzMtJBAiAzPxYRS4A3Ai+hnI75GfDOzPzsIPsmSdKwm5UgERGrAU8HNqBMUf0Qmfm5tvaXmUcBR02y/QzK5FiSJA2V+V5I3HqQiIiXAx8C1unXhFKg2VqQkCRJg9HqvTYiYi/gU8CNlFMJAXwVeAfwreb5lyk305IkSUOu7Zt2HUmZ+GmHzDy2WXd5Zh6dmXsBhwAvoNzCW5IkDbm2g8RWwBld99j40z4y89PAxZQRCmmoRcSDHpI0jtoOEmtSTmtMWAGs1dXmh8C2Le9XkiQNQNtB4iZgvY7nN/LArbwnLABWaXm/kiRpANoOEj/lwcHhO8AeEbETQERsAbywaSdJkoZc20HiG8COEfHE5vmHgPuA8yPid8D/AI8G3tfyfqU5l5kPekjSOGo7SPxfyiRUtwBk5s+APSgB4xbgbOBZmXlmy/uVJEkD0OqEVJl5D/DbrnXfA57T5n4kSdL80PaIhCRJGiMGCUmSVK3VUxsRcT/lPhpTycwc+TuPSpI06tr+ZX4hvYPE2sCmwBqUKzdua3m/kiRpANoutty137aIeDRwLLAD5X4bkiRpyM1ZjURz/41XAvcC75+r/UqSpNkzp8WWmXk/cB6w71zuV5IkzY5BXLWxOrDOAPYrSZJaNqdBIiI2Bw4Arp7L/UqSpNnR9uWfn5lkP08CdqTc+fPINvcrSZIGo+3LPw+aYvvPgQ9n5okt71eS1ENEPOi5N5hT29oOEhv3WX8/8PvMvKPl/UmSpAFqex6JX7X5fpIkaX7zXhuSJKnajEYkImLn2tdm5oUz2bckSRq8mZ7aOJ/p3aSrl1VmuG9JA9ZdyAcW8803/n9ots00SLyXhwaJbYG9gF8CFwE3AY8HngFsAnwD+MEM9ytJkuaBGQWJzDyq83lEbAe8DXg98K/NlNgT2x4GHAocTQkgkiRpyLVdbPlPwDmZ+bHOEAHlPhuZeTxwLgYJSZJGQttBYhvg8inaXA5s1/J+NSIiYiAP1cnMhzwkjZe2g0RQ6iAm85SW9ylJkgak7SBxCbBfRDyn18aI2Ad4AXBxy/uVJEkD0PYU2e8ALgS+GhEXNP/+LfA4YBdgZ2B5006SJA25tqfIXhwRfwN8Bti1eSTllAfAlcDBmXlZm/vV6PAcu6T5yDlT+mt7RILMvATYPCJ2ALYCFgDLgEubbZIkaUS0HiQmNKHB4CBJ0gjzpl2SJKnaTG/a9W5KDcS/ZubS5vl0ZGb+00z2LUmSBm+mpzaOogSJU4ClzfPpSMosmJKkMdHG5G+DKnC0sLK/mQaJ3ZrldV3PJUnSGJjpTbsumOy5JEkaba0WW0bE2m2+nyRJmt/avmrjxog4JSL2bm4bLkkS0Psmbyv76OZN+Qav7V/2S4ADgDOAGyLiwxHx1Jb3IUmS5olWg0RmLgS2BT4JPBw4Erg8IhZHxGERsW6b+5MkSYPV+umHzPzvzHwt8ATK6MTXgacCx1FGKb4SEfu2vV9JkjT3Zq2OITPvyczTMnMfYAPgCOAnwD7AqbO1X0mSNHfmqiDyFuCnwBXAPTxwN1BJkqrVFGiqXbN20y6AiNgceCnwYuCJlABxNfDZ2dyvJEmaG60HiYhYB3gRJUBsTQkPtwOfBk7yVuKSJI2OVoNERJwG7A08gnI/jXOAk4DTM3NFm/uSJEmDF22eP4qI+4ErKacuPp+ZN7T25vNURCwGtupc5zk5SdJsmcVJti7NzEUr+6K2T21sn5nfb/k9JUnSPNX2hFSGCEmSxsiMRiQi4s+af96Qmfd1PJ9SZl43dStJkjSfzfTUxhJKUeVC4KqO51PJFvY9b2y11VYsXrx40N1Qo/v8oTUrkkbJbPxMW7RoEZdeemnVa2f6y/xzlFCwrOu5JEkaAzMKEpl50GTPJUnSaJurKbIlSdIIMkhIkqRqM71q4zOVL83MPHgm+9bw6zWpShtFRBZXStLcmWmx5UF91ie97/A5sT4Bg4QkSUNupkFi467nDwOOBXYCPgqcD9wEPB7YDTgUuBA4Yob7lSRJ88BMr9r4VefziHgDJURs1bXtSuCCiPgssBh4HnDcTPYtSZIGr+1iy1cCX+oOGBMy81rgy007jbnMfMhDkjRc2g4SGwG3TdHm9007SZI05NoOErcAz+y3MUqZ/jOBW1veryRJGoC2g8SXgf8dEV+KiAcVYjbPTwGe1iwlSdKQa/vGWe8GngHsDzw/Im4Afgs8DtgAWAX4b+ColvcrSVPqNXfJVKzdkSbX6ohEZt5BCRLvpNwJ9M+ApzfLa4F3ADs17SRJ0pBr/VbemXk38AHgAxHxKGABsMzwIEnS6Gk9SHRqwoMBQpKkETW0N+2KiD0i4vSIuCki7oqI30TENyNi7x5td4iIMyNiaUQsj4gfRcThEbHKIPouSdKoaH1EIiJ2Ad4EbAOsQ++wkplZve+I+FCzj+uBr1EuO10PWATsCpzZ0fZ5wGnACsrVIkuB51Km8t4ROKC2H5KGi4WTGgY1RcFTmc3PfqtBIiKeDXyFcnXGdZSpse9teR+HUELEZ4FXNjUZndsf3vHvtYATgPuAXTPzh836dwHnAvtHxIGZeXKbfZQkaVy0PSJxFHAP8OzMPLvl9yYiVgPeTwkpDwkRAJl5T8fT/SkjFZ+bCBFNmxUR8U7g28BrAIOEJEkV2g4SWwAnz0aIaPwNJRgcB9zfjIBsQTlt8YPM/G5X+92b5Vk93utC4E5gh4hYLTPvmqU+S5I0stoOEndQahBmy9Ob5QrgMkqI+JOIuBDYPzN/16zarFle1f1GmXlvRFwL/BXwZOCKWenxHJuNc2u9eK5ZkmbHsP18bTtIfBvYvuX37LR+s3wT8DPKLcsvBzYGPgLsSZmme9em3YJmuazP+02sX3uqHUfE4j6bNp/qtZIkjaq2L/98C7BJRLwzZudP44n+3gvsk5kXZeYdmflj4PmUqzh2iYjZDDOSJKnR9ojEe4CfAv8IvDwiLqf3bcUzMw+ueP+J97osM5d0veGdEfFN4GDKpaff5YERhwX0NrF+qlufk5mLeq1vRiq2mur1kiSNoraDxEEd/96oefSSlF/4K+vKZtnvF//vm+UaHe23BjYFHnRqIiJWpZwSuRe4pqIv89KwnVuTJA23toPExlM3mZFvU0LIX0bEwzLz/q7tE8WX1zbLc4H/A+wF/L+utjsDjwQu9IoNSZLqtH33z19N91H7/sAZlLuJvr5zW0TsCTyTMloxcbnnqZRZLw+MiK072q4OvK95+omavkiSpFm+adcseS2wJXBMM4/EZZSRkH0pM1i+IjOXAWTm7c1MmKcC50fEyZTLU/ehXBp6KmXabEmSVGHobtqVmddT7qnxceAvKCMTu1JGKnbMzNO62n8F2IUyAdV+wKGU2TePAA5MiwokSao24xGJiLiv4mUzumlXM+HUoc1jOu0vBh5yV1BJkjQzbZzaqJkvYm6mX5QkSbNqxkEiM4fu9IgkSWqHIUCSJFUzSEiSpGoGCUmSVM0gIUmSqhkkJElStWGc2VKSNKYiBjN7gHMX9ueIhCRJqmaQkCRJ1QwSkiSpmkFCkiRVs9hSI6e7GMsiKWl0+P08/zgiIUmSqhkkJElSNYOEJEmqZo2ERo7nUKWZsc5IK8MRCUmSVM0gIUmSqhkkJElSNWskJFXrdQMlz6cPP/8PtTIckZAkSdUMEpIkqZpBQpIkVTNISJKkahZbSqpmUZ4kRyQkSVI1g4QkSapmkJAkSdWskZAkzYleE5jNBmt35pYjEpIkqZpBQpIkVTNISJKkatZISJLmhLULo8kRCUmSVM0gIUmSqhkkJElSNYOEJEmqZrGlht5Uk9xY4CVJs8cRCUmSVM0gIUmSqhkkJElSNWskNPSsgZA0H3TXa43LzyZHJCRJUjWDhCRJqmaQkCRJ1QwSkiSpmsWWkiS1YFyKK7s5IiFJkqoZJCRJUjWDhCRJqmaNhDRN4zrZjCRNxhEJSZJUzSAhSZKqGSQkSVI1aySkabImQpIeyhEJSZJUzSAhSZKqGSQkSVI1g4QkSapmkJAkSdUMEpIkqZpBQpIkVTNISJKkak5IJUmT8GZt0uQckZAkSdUMEpIkqZpBQpIkVbNGQpImYU2ENDlHJCRJUjWDhCRJqmaQkCRJ1YYySETEsyPi7Ii4PiKWR8Q1EfHliNi+T/sdIuLMiFjatP9RRBweEavMdd8lSRolQxckIuKDwH8BWwFnAccDlwLPAy6OiBd3tX8ecCGwM3A68HHgEcCxwMlz1/P2RcSUD0mSZtNQXbUREY8H3gj8FnhaZt7csW034FzgvcAXmnVrAScA9wG7ZuYPm/XvatruHxEHZuZQBwpJkgZl2EYk/pzS5+93hgiAzDwP+AOwXsfq/ZvnJ0+EiKbtCuCdzdPXzGqPJUkaYcMWJH4B3A1sExHrdm6IiJ2BRwPndKzevVme1eO9LgTuBHaIiNVmoa+SJI28oTq1kZlLI+ItwDHAzyLiK8CtwCbAPsC3gFd1vGSzZnlVj/e6NyKuBf4KeDJwxWz2fTY4UY4kadCGKkgAZOZxEbEE+AxwSMemq4GTuk55LGiWy/q83cT6tafab0Qs7rNp86leK0nSqBq2UxtExJuBU4GTKCMRawKLgGuAL0bEhwbXO0mSxstQjUhExK7AB4HTM/OIjk2XRsTzKacwjoyIT2bmNTww4rCA3ibW3zbVvjNzUZ8+LaZciipJ0tgZthGJ5zTL87o3ZOadwA8oX9OWzeorm+Wm3e0jYlVgY+BeymiGJElaScMWJCaurlivz/aJ9Xc3y3Ob5V492u4MPBK4JDPvaqd7kiSNl2ELEt9plq+MiA06N0TEs4AdgRXAJc3qU4FbgAMjYuuOtqsD72uefmJWeyxJ0ggbqhoJSjA4B/hr4IqIOB24CVhIOe0RwFsz81aAzLw9Ig5pXnd+RJwMLKVcKrpZs/6UOf8qJEkaEUMVJDLz/ojYG3gtcCDwfMrpiaXAmcBHM/Psrtd8JSJ2Ad4B7AesTrlU9IimvZMxSJJUaaiCBEBm3gMc1zym+5qLgb1nrVOS1LJxuOmef8eNhmGrkZAkSfOIQUKSJFUzSEiSpGpDVyMxTubqHKnnKaX5x+9LDQtHJCRJUjWDhCRJqmaQkCRJ1ayRmMc8RypJmu8ckZAkSdUMEpIkqZpBQpIkVTNISJKkahZbzoK2JpKy2FKSNN85IiFJkqoZJCRJUjWDhCRJqmaNxCywtkEaL911Uf4M0DhxREKSJFUzSEiSpGoGCUmSVM0aCUmaIWsiNM4ckZAkSdUMEpIkqZpBQpIkVTNISJKkahZbSpI0IDU3eZxvxb2OSEiSpGoGCUmSVM0gIUmSqlkjIUnSgMy3eocajkhIkqRqBglJklTNICFJkqpZIyH1MArXdkvSXHBEQpIkVTNISJKkagYJSZJUzSAhSZKqWWwp9WDhpCRNjyMSkiSpmkFCkiRVM0hIkqRq1kho5ExnMilrICSpHY5ISJKkagYJSZJUzSAhSZKqGSQkSVI1iy01ciyklMabd++dW45ISJKkagYJSZJUzSAhSZKqWSMhSRop1jvMLUckJElSNYOEJEmqZpCQJEnVrJGQpBHh/AkaBEckJElSNYOEJEmqZpCQJEnVDBKSJKmaxZaSWtVd8Gcx39zxWGsQHJGQJEnVDBKSJKmaQUKSJFWzRkJSqzxPrzbVTLLVzc/k7HJEQpIkVTNISJKkagYJSZJUzRoJSdK8ZX3D/OeIhCRJqmaQkCRJ1QwSkiSpmkFCkiRVM0hIkqRqBglJklTNICFJkqqF1+jOTETcusYaazxm4cKFg+6KJElVrrjiCpYvX740Mx+7sq81SMxQRFwLrAWs3qz6+QC7M6o2b5Ye2/Z5bGePx3b2eGzbtxFwe2ZuvLIvNEi0JCIWA2TmokH3ZdR4bGePx3b2eGxnj8d2frFGQpIkVTNISJKkagYJSZJUzSAhSZKqGSQkSVI1r9qQJEnVHJGQJEnVDBKSJKmaQUKSJFUzSEiSpGoGCUmSVM0gIUmSqhkkJElSNYPEDEXEhhHxmYj4TUTcFRFLIuK4iFhn0H2b7yLisRHxiog4PSKujojlEbEsIi6KiIMjoufnMyJ2iIgzI2Jp85ofRcThEbHKXH8NwyQiXhwR2Txe0afNcyLi/Ob/4Y6I+H5EvHSu+zosImKP5vN7U/P9/5uI+GZE7N2jrZ/baYqIZ0fE2RFxfXOsromIL0fE9n3ae2wHyAmpZiAiNgEuAdYHvgr8HNgG2A24EtgxM28dXA/nt4h4NfAJ4EbgPOA64HHAC4AFwGnAAdnxIY2I5zXrVwCnAEuB5wKbAadm5gFz+TUMi4h4EvBjYBXgUcAhmfmprjavAz4G3Eo5tncD+wMbAv+SmW+c007PcxHxIeBNwPXAN4BbgPWARcA5mfnmjrZ+bqcpIj4IvJnyOfwK5bg+BdgHWBV4SWZ+oaO9x3bQMtNH5QP4JpDAoV3rj2nWf3LQfZzPD2B3yjf8w7rWP54SKhLYr2P9WsDNwF3A1h3rV6cEugQOHPTXNd8eQADnAL8EPtwcp1d0tdmI8oP4VmCjjvXrAFc3r9l+0F/LfHkAhzTH5CTgET22P7zj335up39cHw/cB9wErN+1bbfmWF3jsZ1fD09tVGpGI/YElgD/2rX5PcAfgb+PiDXnuGtDIzPPzcwzMvP+rvU3AZ9snu7asWl/yl98J2fmDzvarwDe2Tx9zez1eGgdRgltL6N8Lnt5ObAa8PHMXDKxMjN/D3ygefrqWezj0IiI1YD3U8LuKzPz7u42mXlPx1M/t9P355RT7t/PzJs7N2TmecAfKMdygvfLIi4AAAqESURBVMd2HjBI1NutWZ7d4xfhH4CLgUcC2811x0bExA/iezvW7d4sz+rR/kLgTmCH5ge9gIhYCBwNHJ+ZF07SdLJj+42uNuPubyi/vP4TuL85n/+WiHh9n3P4fm6n7xeUU2rbRMS6nRsiYmfg0ZTRtQke23nAIFFvs2Z5VZ/tv2iWm85BX0ZKRKwKvKR52vkDou8xz8x7gWsp51CfPKsdHBLNcfw85S/nt0/RfLJjeyNlJGPDiHhkq50cTk9vliuAy4D/ooS144BLIuKCiOj8q9nP7TRl5lLgLZRaqZ9FxL9HxD9HxJeAs4FvAa/qeInHdh4wSNRb0CyX9dk+sX7tOejLqDka2AI4MzO/2bHeY75y3g1sCRyUmcunaDvdY7ugz/Zxsn6zfBPlHPxOlL+Un0b5Zbcz8OWO9n5uV0JmHkcpuF6VUovyVuAA4NfASV2nPDy284BBQvNKRBwGHEm5AubvB9ydoRUR21JGIf4lM7876P6MmImfm/cC+2TmRZl5R2b+GHg+5SqOXfpdqqjJRcSbgVMphaybAGtSroS5Bvhic7WM5hGDRL2p/kKbWH/bHPRlJDSXHx4P/AzYrRnm7OQxn4bmlMbnKMO975rmy6Z7bPv95TdOJj5fl3UWpgJk5p2Uq7mgXAoOfm6nLSJ2BT4IfC0zj8jMazLzzsy8lBLSbgCOjIiJUxUe23nAIFHvymbZrwbiL5plvxoKdYiIwylzGPyEEiJu6tGs7zFvfnluTPkr8ZrZ6ueQeBTlGC0EVnRMQpWUK4oATmjWHdc8n+zYPoHyV+H1zS/KcTdxrPr9cvp9s1yjq72f26k9p1me172h+ez9gPJ7a8tmtcd2HjBI1Jv4oO/ZPQNjRDwa2JFSMfy9ue7YsImItwDHApdTQsTNfZqe2yz36rFtZ8pVMpdk5l3t93Ko3AV8us/jsqbNRc3zidMekx3bZ3W1GXffptRG/GWf2Ve3aJbXNks/t9M3cXXFen22T6yfuOTWYzsfDHoii2F+4IRUbRzDdzXH6ofAY6ZouxbwO5x8ZibH+yh6T0i1MU5ItTLH8avNMXlD1/o9gfspoxILmnV+bqd/XF/YHI+bgA26tj2rObbLgcd6bOfPwymyZ6DHFNlXANtS5pi4CtghnSK7r+YeDidRZrL7GL3Pvy/JzJM6XrMvpRBrBXAyZTrcfWimwwVemH6o+4qIoyinN3pNkX0o8FGcIntKEbEh5Xv/SZQRissoYWxfHvjldVpHez+309CM8HwT+GvK5FOnU0LFQsppjwAOz8zjO17jsR20QSeZYX9QfpCcSLlfxN3AryjXk68z6L7N9wcP/HU82eP8Hq/bETiT8lffcso9JN4ArDLor2m+P+gzItGx/bnABZQf4n8E/ht46aD7PR8flGH2jzXf83dT7glxOrBNn/Z+bqd3XB8OHE45LXw7pcbhZsp8HXt6bOffwxEJSZJUzWJLSZJUzSAhSZKqGSQkSVI1g4QkSapmkJAkSdUMEpIkqZpBQpIkVTNISJKkagYJSZJUzSAhSZKqGSQkSVI1g4SkgYiIiyLi3hbe5/qIuHol2j8lIjIiPjV1a0lTMUhIYyQivtj8Ev2HabQ9u2n7/Lnom6ThZJCQxssJzfIVkzWKiI2AvwZuBM6Ypb78HfBXs/TekuaIQUIaI5l5PnAVsGVEbDVJ04OBAE7MzBmffujTl+sy88rZeG9Jc8cgIY2fiVGJQ3ptjIhVgJcBCXyqWbdBRLwnIi6JiJsi4u6IuKE5VbJ5j/f4Ux1CRGwWEV+OiN9FxP0R8YymzUNqJCJitYg4NCK+ERG/ioi7ImJpRHwrIp452RcVEWtHxL9FxG8iYkVE/DQiXhsRMd0DExFrRsTbI+J/IuKPEXFH8zX/bY+2EREvi4jvNl/bioj4dUScFRH7T3ef0rAzSEjj57PA3cCLIuKRPbY/C9gAOCczr23W7Qa8GVgKnAYcB/wAeCHwg4jYos++Nm3abQh8gRJi/jBJ39Zr3vtRwLeAY4CvAYuAb0TEQX1etxpwLuV0zH80+3ks8PHm/aYUEesAFwPvB+4BPkM5Vo8DTo6Io7pe8sGmzXrAl4BjgW8DTwIMEhofmenDh48xewCnUEYcDuqx7avNtv071j0OeFSPtlsCfwTO6Fr/lOY9Enhvnz5cBNzbtW51YIMebdcGrgB+B6zWte36Zj8XAI/oWL8ucG2zbYcefftU1/t8oVl/RNf6NSih5n7gqR3rlwHXAWv06O+6g/4/9uFjrh6OSEjj6d+b5YOKLiPiCcDewM2UQAFAZv42M+/ofpPMvIzyC3yP5pRIt98A75tupzJzRWbe0GP9bcCJlHCwqM/L35qZd3e85hbK6AKUUzV9RcT6wIuA72XmMV37Xg68lVIz8qKul94N3Nejv7dMtj9plKw66A5IGohzgV8CO0bEwsy8oln/MsrPhZMy857OF0TEPsCrKL/IH8tDf348hjJi0Onyzl/u0xERTwXeBDwDeCLltEWnDXq87C7gez3Wn98st5xit9tQTvVGj1MYdPRhYce6LwKvAX4aEV8CLgS+m5m3T7EvaaQYJKQxlJkTEzL9M2VU4simKPFgyvD+CZ3tI+JI4COUGolzgF8By5u2LwCeykN/4QPctDL9iogdm/d/GKXe4KuUmor7ga2A5/bZz+8yMyfZ/4Ipdv3YZrlt8+jnUR3/Pgy4GjgIeHvzuDcivk45PXLNFPuURoJBQhpfJwLvBV4SEW8DdgKeDJybmX+aKTIiHg68h3KaYqvM/G3nm0TETpPso9cv98m8i1InsVNmXtS1n3dRgkQv60VE9AgTj2+Wy6bY78T2D2fmm6fT0SyXxR4DHNOcGtmJMjfGC4CFEbFF96iONIqskZDGVBMIvkapO9iXB+ol/r2r6eOARwMX9QgRazH1aYOV8RTg5u4Q0dhlktetBmzXY/2uzfKyKfb7fUromSwU9ZWZN2fmaZm5H+UUx6bAX9a8lzRsDBLSeJs4hXEk8HzgFuD0rjY3UmoQnh4Ra06sjIhHAB8D1mmxP0soowsPmvEyIl4F7DHFa49u+jTxmnWBdzRPT5zshZl5I3AysF1EvK1X4WgzN8afN/9eIyK279Hm4TxwPO6cor/SSPDUhjTezqb88t6mef7x7uLIzLwvIj4GvBH4cUR8jTICsDul9uACJh8tWBnHUgLDJU0B4+1N37anzF+xX5/XXU8ZNflJR//2p5za+GhmXjKNfb+GMiLyAeCgiLiIUjz6BMrowtbAAZT6kDWbPv4CWEy5DHR1YE9gc+A/M/MXK/elS8PJEQlpjDU1BZ13wTyhT9O3USakuoty5ca+lNMBT6f8Em+rP18Hngf8HDgQeDnlL/tdgbMmeeldlGDzbUqdwiuB3wOHAodPc9/LKKc2Xk8pKt2/ee2ulBqKwylXu0AJOG8FrgF2bF7zIuA2yvE5cDr7lEZB9C50liRJmpojEpIkqZpBQpIkVTNISJKkagYJSZJUzSAhSZKqGSQkSVI1g4QkSapmkJAkSdUMEpIkqZpBQpIkVTNISJKkagYJSZJUzSAhSZKqGSQkSVI1g4QkSapmkJAkSdUMEpIkqdr/B1sEuUslGLZKAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 264,
       "width": 265
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "off = crossover(get_crossover(\"real_exp\", prob=0.95), a, b)\n",
    "show((off[:n_matings] != a[0]))"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. _nb_crossover_differential:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Differential Crossover ('real_de')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The differential crossover is used in the [differential evolution algorithm](../algorithms/differential_evolution.ipynb). It adds the difference of two individuals to another one.\n",
    "\n",
    "It can be initiated by"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "crossover = get_crossover(\"real_de\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the following, the different creating of donor vectors is shown. The difference between $x_{\\pi_2} - x_{\\pi_3}$ is added with different weights $F \\in (0, 1)$ to $x_{\\pi_1}$. The resulting donor solution can be used for further evolutionary recombinations (for example, DE uses it for another crossover)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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wJckSSpTKzes5KI/XpTTuRf98aKS2EXnkUceYdKkSQwbNox58+YxZMgQbrvtNhYuXNjo3IceemjbNe+99x5LliyhsrKSadOmcfHFF7d26a3GgC9JklSGsu2ik00p7KLz7LPPMn78eAYMGMCsWbPo27cvV155JVu2bGkysC9btowQAsceeyz9+/enurqa9evXc8wxx7Bp0yYOP/xwDjvsMIYNG8Z///d/F+EnKgwDvsrXvHlw4IFQUQEhJF+9esFNNxW7MkmSCq6t7aIzd+5cTj75ZHr06METTzzBnnvuCcD48eM5/PDDmTlzJs8880y9a1555RX2339/unXrtm2MyspKBg0aRPfu3Xn66aeZO3cuf/rTn7j66qtZubL4/0KRDwZ8ladp02D4cFiwAGLc3r56NZx/PgzcuV0FJElqa9rSLjpvvPEG48aNI4TArFmzGNjgv9PXXHMNABddVH+50bx58zj00EO3vZ87dy7Dhg2joqKCdu3abbsxd9OmTcQYiXUzQRtmwFf5WboU/uVfdnzOm29C5rd9SZLSKNsuOgN7DOTBUx5ssr1Yu+gMGjSIpUuXsnr16nqBvdYJJ5xAjJHZs2fXa583bx7Dhw/f9n7u3Ln13q9Zs4bhw4czYMAALrroIvr06VO4H6IVGfBVfr785dzOq66G9u0LW4skSUXUu0vveiG/NsQP3n1wk+2lsotOLmpqanj11Vfr/UJQVVXFvvvuu+19z549eeWVV3jrrbeYMWMGy5YtK0apeWd6Ufl5/vncz926NQn5W7YUrh5Jkoqod5fe/Grcr3jynSc5YZ8Tts3QZ2tvK6qqqqiurq4X8A855BCuv/56RowYwUknnbStfY899mD48OE888wzjB8/vhjl5pUBX+Vn69Yd93ftmsze1z1/2DB49dXC1iVJUpH07NyT8Qc0DrbZ2tuCwYMHN1pTf9999217vWzZMiorK+nevTsffPABTz/9NN/85jdbu8yCMOCr/LRrBzU1jdsrKuDpp2HVKjjllPp9f/0rTJgAdf5ikCRJbdfbb7/NOeecs+3m2vPPP59DDjmk2GXlhQFf5eeII+C55xq333RTEv4bhvta998PnTrB+vXJeZIkqc064ogjmDt3brHLKAhvslX5mTEje99RR+342s2bIbOlliRJUiky4Kv87LMPXHVV4/Zzz83t+s2b4eCD81uTJElSnhjwVZ4uuQQmT9716197DTp2hA0b8leTJElSHhjwVb6uuw6++MVdv/6jj5LlOuvW5a8mSZKkFjLgq7zddx98/estG6N792TZjiRJUgkw4Es//zn8/vfNnxdC9r46j72WJEnp1HBf/VJlwJcAPv3p5p9WW/f/1IMHQ69e298vWOAsviSpIEJmgqmmqWe4qFXVBvywo0m/EmDAl2q1awczZ+Z27n33wYcf1m/7xS/yX5Mkqex16tQJgOq6T1lXUdT+GdT+mZQqA75U1ymnwAMPZO8PIQn3jz7aeMZ/yZLC1iZJKkvdu3cHYOnSpaxdu5aampo2s1QkDWKM1NTUsHbtWpYuXQps/zMpVT7JVmro859PwnvHjlD3n0NPPz3ZeWfiRHjqqcbX3XgjTJ2a3HR74YXw7//eejVLklKrV69eVFdXs379ev72t78Vu5yyV1lZSa+6y3RLkDP4UlPatYNXX63fds89MGBA0+EeoLo62Rd/+fJkn/1OnWD+/MLXKklKtYqKCvbee2/69u1L586dS379dxqFEOjcuTN9+/Zl7733pqKitCO0M/hSNgceCC+8AEcdldv5++4LgwbBK6/A++8nN90eemiyVr9Ll8LWKklKtYqKCvr06UOfPn2KXYragNL+9UMqtlGjYPbsHW+RCfCXv8DixfDkk7BiBdx9d9K+ZQt89asFL1OSJKmWAV9qzpFHJk+t/da3kpn4EJIlPLW+9S0YNix5vXkznHhisk6/1oMPJv8a8PrrrVu3JEkqSwZ8KRft2sFNN8H69cmNtwsXbu+bOjU5btgAu++ezOI33Kt4wQIYMgSefrr1apYkSWXJgC/tit133/66qio5HnRQ8gsAQIcOTV/38Y/DE08UtjZJklTWDPjSrujVa/synS9+EZYuTdbgQ7J7zkcfZb92zBh48cWClyhJksqTAV/aVSedlBznzYORI7e3b9rU/LVHHgmTJxemLkmSVNYM+NKuevhh6NEjeb0rT7H98Y/h1FPzW5MkSSp7BnxpV7VrBytXwvDhuz7GzJlw8sn5q0mSJJU9A77UEu3awdy5SdCva2eecPf738PAgfmtS5IklS0DvpQPvXolD8Wq1XCbzOa8+Wby1FtJkqQWMuBL+fLss9C7d27n1n1QVq2//AVuuCG/NUmSpLJjwJfypV07eP/93EL+1q1Nt3/nO/WfgitJkrSTDPhSvr3/Puy3365ff9dd8JnP5K8eSZJUVgz4UiG8+SZ07Ljr1z/yCHz5y/mrR5IklQ0DvlQomzZBCLt+/b33wje+kb96JElSWTDgS4VUU7NzW2Y29ItfwLe/nb96JElS6hnwpULLdkNtrm68Eb70pfzUIkmSUs+AL7WGGJveGrOhDh2abr/vPnjuufzWJEmSUsmAL7WWLVvguOOy93foAB99lL3/mGNgxIj81yVJklLFgC+1pj/+EUaPbrpvR+G+1v/7f7DbbvmtSZIkpYoBX2ptzz4L//iPu3792rUt24JTkiSlmgFfKoaXX4bTTtv16z/6qGW780iSpNTKW0IIIQwIIdweQlgSQtgUQlgcQrghhLD7Low1IoQwI4Twt8xYy0IIfwwhfC1f9UpF9+CDO7cF5h57QOfO29/HCPvum/+6JElSm5aXgB9CGAjMAc4CXgR+ArwJXAC8EELovRNjnQf8GRgD/C/wY+AhoB3w6XzUK5WMqVPhpz9t/rwOHeDvf4eTT67f/s478MEHhalNkiS1Se3zNM7NQD/g2zHGG2sbQwjXA98BrgKafSRnCGEM8FPgCWB8jHFtg/4sewhKbdj558Py5XDllU33d+gAr76abLP5u9817u/ZEyZMSJ58K0mSyl6LZ/Azs/djgMXAzxp0/xCoBiaGELrmMNx1wAbgKw3DPUCMMYdtRqQ26Ior4L33Grd36QIbNsABB8DRR8OmTU1ff999yZr8lj5US5IktXn5WKJzfOb4eIyxpm5HJqQ/B1QCo3Y0SAhhGHAo8DiwKoRwfAhhcgjheyGET4UQvKNQ6da/P9xyS/22DRvgoIOS2fsXXtjx9TFC+/aGfEmSylw+QvOQzPH1LP2LMscDmhnnnzLH5cD/Bf5AMqP/X8CTwNwQwqBdL1NqA77xjWS5TV2vvw41NU2f35QOHWDz5vzWJUmS2ox8BPwemWO2O/1q23s2M06/zPFs4GPAZzJjHwDcBRwC/D6E0OwG4CGEOU19AUObu1YqunvvhW99K/fzTz0V+vbd/j5G2HPP/NclSZLahFJa9lJbSzvgyzHGR2KMH8YYFwFfA14iCftfKFaBUqu56SYYO7b58046CR5+GFasqN++ahV07w7r1hWmPkmSVLLyEfBrZ+h7ZOmvbV/TzDi1/UtjjPUWG8cYIzAz8/aI5gqKMY5s6gtY0Ny1Usl47DH47W+zP9DqjDPg0UezX79uHey2myFfkqQyk4+AvzBzzLbGfnDmmG2NfsNxsv0isDpz7JJjXVLb99nPJjfNnnRS/fbddoP772/++hihRw/X5EuSVEbyEfCfyhzHNNzpJoTQHRgNrAdmNzPObJItNT+WZUvNYZnjWy2oVWqbHn64/vsPP8w9tNfUQKdOsHRp/uuSJEklp8UBP8ZYRbK15ceAhncGXg50BabHGKtrG0MIQ0MI9W54jTGuB6YBnYErQwihzvmHAJOALcBvWlqz1OZ07Ah33tmyMfbcM3kariRJSrV8Pcn2XOB54DJSAv4AACAASURBVKchhE8B84EjSfbIfx24tMH58zPH0KD9B8BxwIXAUSGE54A9gM+TBP8LM79QSOVn4kT44IPkybe56N4d1jZ4Xtx++7lcR5KklMvLLjqZ0H048CuSYP89YCAwFRgVY1yZ4zgfAscCVwO9gPOAk4FngbExxqn5qFdqs847b8c31tZ68MHG4R7go4+S9fvvvJP/2iRJUknI1ww+McZ3gbNyPLfhzH3dvnUkM/4NZ/0lAYwbB2++CYMGNf0ArP/zf+BLX8p+/dq1sO++8OyzMHp04eqUJElFUUr74EvK1X77ZZ+F/9GPkpn65hxzDFS54k2SpLQx4Ett1V57wYJdeLRDqPMPaIcfnr96JElSSTDgS23ZkCHwt7/t3DWf+cz212vWwKuv5rcmSZJUVAZ8qa3bay9YmdN97Im77oJ27ba/v+aa/NckSZKKxoAvpUGvXvDee/WX3zTl6qvhrbeSp+PWmjEDKirgkENg/vzs10qSpDbBgC+lRf/+UF2d3IDbUI8ecPfd8L3vwYgRjftjTJbqHHQQ/Oxnha9VkiQVjAFfSpMuXZItNHfbbXtbu3Zw5JHw4x9Dp05JmN+R886DyZMLW6ckSSqYvO2DL6mELF0KXbsmYX7rVnj88Z27/sc/hsGD4etfL0x9kiSpYJzBl9KoSxfYuBG6d2/+3NNPh02bYMsWaF/nd/5vfKP+Wn1JktQmGPCltOrYET78EKZPhz33TG6kbeiyy5KbbL/4xSTcb9lSv799ezjzzFYpV5Ik5YcBX0q7r34VliyB++6r315RAT/8IYwdC7/9bfbr77wTRo8ubI2SJClvDPhSufjCF+pvo9m+Paxbl9v6/OefT2b7JUlSyTPgS+XktNO2v968OdkWc0fq7sZz+eXw978Xpi5JkpQ3BnypnDzwQP3Q/u67Oz7/9tvrvz/oINiwIf91SZKkvDHgS+Xmgw+SG3Cb06EDjB9fv+3DD6GyEv7pnwpTmyRJajEDvlSONm1KdtbJpl07+Oij7P0vvZRsxSlJkkqOAV8qV0uWwN1312/r2jW5mTaX/e83boT99itIaZIkadcZ8KVy9pWvwF57bX9fXb3j3XL+9V/h2mu3v1+8GB55pFDVSZKkXWDAl8rd3/6WzNw3p107WLYMLrmkfvtnPgPf/W5hapMkSTvNgC8p2Q//+OOz91dUQN++yQOxamoa9//kJ3DiiYWrT5Ik5cyALynxhz8kD73q1Kl+++c/D2ecAUuXJu+zrbt/8kmYMaOwNUqSpGYZ8CVtd+KJyVaYdfXpA/fem7zu3z9Zd5/NGWfA179esPIkSVLzDPiS6uvYEUaP3v7+1luTp95CMosf446vv/XW3Nb0S5KkgjDgS2rs2WehZ8/cz6+srP9+/Xro1y+/NUmSpJwY8CU1bfXq5p9YW1EBCxfCYYcl79u1g/btk9crVsCcOYWtUZIkNWLAl5Tdiy/C3LkQQtP9M2cmQf7555P3Rx6ZrNmvdfjh8KtfFbxMSZK0nQFf0o4NHw6PPtp033e/C8ccs/39889v322n1llnQYcO29fxS5KkgjLgS2re2LHw4x83bl+0KLfrt2xJtt/cujW/dUmSpEYM+JJy893vwvLl9XfI6dABvvKV3Mdo396ZfLU961fBS79Mjrm0S1KRtS92AZLakL594bXXYN99k/cffQT/+787N0anTskuO1265L8+Kd/WrYA7ToYVC+CRq+Bny2HdVjjucDh5Y9L+p5/Dmf8D3foWu1pJApzBl7Sz9tkHLr54+/tly7KfW1EBI0cmu+vUtffehalNyqe64R6gZgV8oQa6boT95mxvX7EgOW/diuLVKkl1GPAl7bxrr4Xbb8++uw4k++hv2AAvvbR968xaK1fCSScVtkapJdavqh/ua/VrB+d2S4511YZ8l+tIKgEGfEm75qyzoKam/mx+Xc88kzwVd8IE2LSpcf9jjyW/ILzxRmHrlHbFazMbh/vmrFgA839bmHokaScY8CW1zLXXNp7Jb98ehg2DM8+E++/f8fWDB7u7jkrPQZ+Dip1cU993KBx4SmHqkaSdYMCX1HINQ/yWLUnov/PO3K7v1Cl5YJZUKip7JTfULs/xl8/lW5MbbSt7FbYuScqBAV9Sy33hC3DXXbt+/dat0K/f9ifiSqVg3Vb4zYbczv3NBnfRkVQyDPiS8uOMM+Dee1s2xujR8Kc/5aceqaVG/yOMz3E71/Fd3EVHUskw4EvKnwkT4Nlnczu3Tx/YbbfG7aNG5bcmaVesXwWf+6jxbjnZ9GvnLjqSSoYBX1J+jR4Nb78Ne+6Z/Zyjj07W3H/4YfK+osFfReeeW7j6pFy4i46kNsyALyn/9tkHliyBDh2a7v+P/6i/N35NTf3+W25JHo719NOFq1HakYM+l+yKszPcRUdSiTDgSyqcbHvcH3ts81tj1tTAxz8O112X/7qk5lT2SnbFaRjyl2+Fm9c13l2n71B30ZFUMgz4kgpnn31g0aKWjfFv/wY//GF+6pF2Rre+9UN+36Hwn28l4f4/36rffub/uIuOpJLRvvlTJKkFBg2CGJMlN3WX4rRrl/sDrn70I+jaNQn7Umvq1hfOejRZW3/gKdtn6LO1S1IJcAZfUuto+CCrnX167cUXw+c/n796pFxV9oKRkxqH+GztklRkBnxJraNXL1izJvfzu3dv3PbQQ/DMM/mrSZKkFDLgS2o9PXrAli1w3HE7Pu+vf4XvfKfpvuOOc3cdSZJ2wIAvqXW1awd//CPccUfT/f/4j7B8ebLuPpuPfxwuvLAw9UmS1MYZ8CUVx9e+Bp06NW5fsACOP77566dOhXHj8l+XJEltnAFfUvFUVzdu27Ah9+tnzcq+lEeSpDJlwJdUPO3aJVtotsQNN8DYsfmpR5KkFDDgSyq+lob8xx+HM87ITy2SJLVxBnxJpSHXkH/zzXDwwY3bZ8yAzZvzW5MkSW2QAV9S6YgRBgzI3j99OowenWyj2ZQvfakwdUmS1IYY8CWVlnffhfPOa7rvjjtg+PDs1z78MHTtCv/xH4WpTZKkNsCAL6n03Hgj7LFH4/Ynn2z+2vXrYcoU+PKX81+XJEltgAFfUmlauhQqK3f9+nvvhVNPzV89kiS1EQZ8SaWruhr233/Xr585E4YOzV89kiS1AQZ8SaWtqgo+9rFdv37hQhgyJG/lSJJU6gz4kkrfW2/ByJG7fv3rr7fslwRJktoQA76ktuGll+C995JtMpsTQuO2t9+Gz30u/3VJklRiDPiS2o7+/eHZZ6FXr+zn/NM/bX9o1l571e/77W99GJYkKfUM+JLanhtvzN735z8nxxBgy5bG/RdeWJiaJEkqEQZ8SW3PV76S7HWfTQhw9tmwbFnjvltugQ4dkodmSZKUQgZ8SW3TNdfAddc1bu/bF3bbDW67Lfu1W7bApEnJLwIu2ZEkpYwBX1LbNXly4yU3K1bABx/kPkanTvmtSZKkIjPgS2rbfvKTZDY/Fx06JDfg/ulP9dt79Mh/XZIkFYkBX1LbN2UKXHFF8+c9/XRyPOKI7TvtAHz4YWHqkiSpCAz4ktLh+9+HmTOhe/fGfRUVyT76o0Yl759+Gnr2rH9OCMn2m67JlyS1cQZ8SelxyinJbPwrr8Aee2xvP/307U/Cvesu+PjHm16nv3p1sib/tddap15JkgrAgC8pfQ49FG69dfv7GTOS4+bNMHFi89cffDCsWlWY2iRJKrD2xS5AkgrilFO2v44RDjsMhg3L/frevWHlyh0/NVeSpBLkDL6k9Lrhhu2vX3kF7r47+7m9esGBB9Zv+4d/gK1bC1ObJEkFkreAH0IYEEK4PYSwJISwKYSwOIRwQwhh9xaMeVwIYWsIIYYQrsxXrZLKxAUXJE+9bc4f/wgrV7L6z3OZMXwsqztnbtTdtAnOP5/V1ZuZ8ad3WF3tDbiSpNKXl4AfQhgIzAHOAl4EfgK8CVwAvBBC6L0LY3YH7gDW56NGSWXq7rth7drsS23+5V/guON4f90mJtz0NJeMO58JZ1zL+5XJ3vjv3zGDCRfcxiUP/YUJv3iB99dtasXiJUnaefmawb8Z6Ad8O8Z4aoxxSozxkyRBfwhw1S6MORXoAeT4BBtJyqJbt2Q9/bnnNu77+c95f90mTr91NotWJ+F9UZ99Of30q1mYOS7qs2/Svnwdp98625AvSSppIdZ92MuuDJDM3r8BLAYGxhhr6vR1B94DAtAvxlid45ifAx4GJpLcCPxL4KoY4/dbWOucESNGjJgzZ05LhpHUloVQ7+3qiy9lwtZhLGrXxP75WQzu1437vn4Uu3ftmO/qJEkpMXLkSF5++eWXY4wjW/t752MG//jM8fG64R4gxrgWeA6oBEblMlgIoR/w38DDMca78lCfJG33m9/Ue/voYy/tVLiHZCb/sb8uzWdVkiTlTT4C/pDM8fUs/YsyxwNyHO+/Ser6RkuKkqQmfeELMG3atrcnLXyewe+/vVNDDO7XjXEH9893ZZIk5UU+An6PzLGJx0LWa++ZpX+bEMI/A6cA58YYl+1qQSGEOU19AUN3dUxJKfLP/wzvvQfA7hvXcs89l+Qc8ge//zb3nDPK5TmSpJJVMvvghxA+BtwA3B9jvK+41UhKvf79kxtv/+Ef6LP+A26a+Z85XXbTzP+kT7dOBS5OkqRdl48n2dbO0PfI0l/bvqaZcW4HNgBNbHOxc7LdzJCZxR/R0vElpUSvXvD3v/P+A7/jvEffzemS8z73b9yzbpMhX5JUsvIxg78wc8y2xn5w5phtjX6tESRbba7IPNgqhhAiyQ46AJdm2h5uWbmStN3q6s2c/vZu27bCbM6iPvty+q2zfeiVJKlk5WMG/6nMcUwIoaKJbTJHkzysanYz49xJsttOQ4OB44C5JA/T+n8trliSMh59dSmLlq/bqWtqd9E5/Yh9ClSVJEm7rsUBP8ZYFUJ4HBgDfAu4sU735UBX4Bd198APIQzNXLugzjjfbmr8EMIkkoD/+5bugy9JDZ00rD+/fO6tnQr57qIjSSpl+brJ9lxgOfDTEMLDIYRrQgh/AL5DsjTn0gbnz898SVJR7d61I/ecM4rB/brVax9csYFZS3/P4O7t6rf36+YuOpKkkpaXgB9jrAIOB34FHAl8DxgITAVGxRhX5uP7SFIh9OnWqV7IH9yvG/dc8lmG/Opm7rng+Prt54zyBltJUkkLMcZi19BqQghzRowYMWLOnDnFLkVSCVpdvZnH/rqUcQf3rzdDn61dkqRsRo4cycsvv/xytt0dCykfN9lKUirs3rVjkzfOZmuXJKkUlcyDriRJkiS1nAFfkiRJShEDviRJkpQiBnxJkiQpRQz4kiRJUooY8CVJkqQUMeBLkiRJKWLAlyRJklLEgC9JkiSliAFfkiRJShEDviRJkpQiBnxJkiQpRQz4kiRJUooY8CVJkqQUMeBLkiRJKWLAlyRJklLEgC9JkiSliAFfkiRJShEDviRJkpQiBnxJkiQpRQz4kiRJUooY8CVJkqQUMeBLkiRJKWLAlyRJklLEgC9JkiSliAFfkiRJShEDviRJkpQiBnxJkiQpRQz4kiRJUooY8CVJkqQUMeBLkiRJKWLAlyRJklLEgC9JkiSliAFfkiRJShEDviRJkpQiBnxJkiQpRQz4kiRJUooY8CVJkqQUMeBLkiRJKWLAlyRJklLEgC9JkiSliAFfkiRJShEDviRJkpQiBnxJkiQpRQz4kiRJUooY8CVJkqQUMeBLkiRJKWLAlyRJklLEgC9JkiSliAFfkiRJShEDviRJkpQiBnxJkiQpRQz4kiRJUooY8CVJkqQUMeBLkiRJKWLAlyRJklLEgC9JkiSliAFfkiRJShEDviRJkpQiBnxJkiQpRQz4kiRJUooY8CVJkqQUMeBLkiRJKWLAlyRJklLEgC9JkiSliAFfkiRJShEDviRJkpQiBnxJkiQpRQz4kiRJUooY8CVJkqQUMeBLkiRJKZK3gB9CGBBCuD2EsCSEsCmEsDiEcEMIYfccr+8aQjgjhDAjhLAghFAdQlgbQngphPC9EELHfNUqSZLUEms2ruH+1+9nzcY1ObVLrSkvAT+EMBCYA5wFvAj8BHgTuAB4IYTQO4dhjgXuAsYCrwI3AjOAvYD/Ap4KIXTOR72SJEm7auWGlUx6bBI/euFHTLr+n1i5W3sIgZW7tWfS1FFJ+2OTWLlhZbFLVZnK1wz+zUA/4NsxxlNjjFNijJ8kCfpDgKtyGGMp8FVgzxjj+MwYXwcOAF4Gjga+lad6JUmSdtrKDSs5+7GzqPqgCoCqvTpz9pT9WLRXJ86esh9V/Tsk7R9Ucfassw35KooWB/zM7P0YYDHwswbdPwSqgYkhhK47GifGODfGeHeMcXOD9rXAjzNvP9HSeiVJknbFmo1rOHvW2VR9+Fa99qq9OvP5qwZTtVf9hQa1Id/lOmpt+ZjBPz5zfDzGWFO3IxPOnwMqgVEt+B4fZY5bWjCGJEnSLnvinSe2zdznquqDKp5858kCVSQ1LR8Bf0jm+HqW/kWZ4wEt+B7/nDk+1oIxJEmSdtmJ+5zIwPc2N39iHQN7DOSEfU4oUEVS09rnYYwemeMHWfpr23vuyuAhhPOAccBc4PYcr5mTpWvortQgSZLUs3NPpl37Fmf/276NluM0ZeDfNzJtwjR6dt6lCCTtspLeBz+E8HngBpIbcL8QY/yomUskSZIKpveGwHU3v5vTudfd/C69u+SykaCUX/mYwa+doe+Rpb+2fafuMAkhnAr8GlgOHB9jfDPXa2OMI7OMOQcYsTN1SJIk1Vp53eVctG5aTude9N3BTNuw0pCvVpePGfyFmWO2NfaDM8dsa/QbCSF8EbgfWAZ8PMa4sJlLJEmSCmrNxjWcvc/snJbnAFT1xl10VBT5CPhPZY5jQgj1xgshdAdGA+uB2bkMFkI4A7gHWEIS7hc1c4kkSVLBuYuO2ooWB/wYYxXwOPAxGj+I6nKgKzA9xlhd2xhCGBpCaHTDawjhTOBO4B3guJ1ZliNJklRIJ+5zIgN7DNypa9xFR8WQjzX4AOcCzwM/DSF8CpgPHEmyR/7rwKUNzp+fOYbahhDC8SS75FSQ/KvAWSGEBpexJsZ4Q55qliRJylnPzj2ZNnZa8rCrOjP5A7f25LplR3DR0EX1HoI1sMdApo11Fx21vrwE/BhjVQjhcOBHJFtafhp4D5gKXB5jXJ3DMPuy/V8U/jnLOW+T7KojSZLU6np36V0v5NeG+N5dejNtw8om26XWFmKMxa6h1YQQ5owYMWLEnDnZtsmXJElq3pqNa3jynSc5YZ8T6s3QZ2tX+Rk5ciQvv/zyy9l2dyykfC3RkSRJKhs9O/dk/AHjc26XWlNJP+hKkiRJ0s4x4EuSJEkpYsCXJEmSUsSAL0mSJKWIAV+SJElKEQO+JEmSlCIGfEmSJClFDPiSJElSihjwJUmSpBQx4EuSJEkpYsCXJEmSUsSAL0mSJKWIAV+SJElKEQO+JEmSlCIGfEmSJClFDPiSJElSihjwJUmSpBQx4EuSJEkpYsCXJEmSUsSAL0mSJKWIAV+SJElKEQO+JEmSlCIGfEmSJClFDPiSJElSihjwJUmSpBQx4EuSJEkpYsCXJEmSUsSAL0mSJKWIAV+SJElKEQO+JEmSlCIGfEmSJClFDPiSJElSihjwJUmSpBQx4EuSJEkpYsCXJEmSUsSAL0mSJKWIAV+SJElKEQO+JEmSlCIGfEmSJClFDPiSJElSihjwJUmSpBQx4EuSJEkpYsCXJEmSUsSAL0mSJKWIAV+SJElKEQO+JEmSlCIGfEmSJClFDPiSJElSihjwJUmSpBQx4EuSJEkpYsCXJEmSUsSAL0mSJKWIAV+SJElKEQO+JEmSlCIGfEmSJClFDPiSJElSihjwJUmSpBQx4EuSJEkpYsCXJEmSUsSAL0mSJKWIAV+SJElKEQO+JEmSlCIGfEmSJClFDPiSJElSihjwJUmSpBQx4EuSJEkpYsCXJEmSUsSAL0mSJKWIAV+SJElKEQO+JEmSlCIGfEmSJClF8hbwQwgDQgi3hxCWhBA2hRAWhxBuCCHsvpPj9MpctzgzzpLMuAPyVaskSZKUVu3zMUgIYSDwPNAPmAksAI4ALgDGhRBGxxhX5jBO78w4BwB/AH4NDAXOAj4TQjgqxvhmPmqWJEmS0ihfM/g3k4T7b8cYT40xTokxfhL4CTAEuCrHca4mCffXxxg/lRnnVJJfFPplvo8kSZKkLFoc8DOz92OAxcDPGnT/EKgGJoYQujYzTjdgYub8yxp03wS8DYwNIezf0polSZKktMrHDP7xmePjMcaauh0xxrXAc0AlMKqZcUYBXYDnMtfVHacGmNXg+0mSJElqIB8Bf0jm+HqW/kWZ4wGtNI4kSZJUtvJxk22PzPGDLP217T1baRxCCHOydA2fP38+I0eObG4ISZIkaZfNnz8f4GPF+N552UWnDanYsGHD1pdffvmVYheikjI0c1xQ1CpUavxcqCl+LtQUPxdqynCgWzG+cT4Cfu3Meo8s/bXta1ppHGKMTU7R187sZ+tXefJzoab4uVBT/FyoKX4u1JQdrCgpuHyswV+YOWZbGz84c8y2tj7f40iSJEllKx8B/6nMcUwIod54IYTuwGhgPTC7mXFmAxuA0Znr6o5TQbIVZ93vJ0mSJKmBFgf8GGMV8DjJTQTfatB9OdAVmB5jrK5tDCEMDSEMrXtijHEdMD1z/mUNxjkvM/4sn2QrSZIkZZevm2zPBZ4HfhpC+BQwHziSZM/614FLG5w/P3MMDdovAT4BfDeEcBjwInAg8DlgOY1/gZAkSZJURz6W6NTO4h8O/Iok2H8PGAhMBUbFGFfmOM5K4Cjgp8CgzDhHAr8ERma+jyRJkqQsQoyx2DVIkiRJypO8zOBLkiRJKg0GfEmSJClFDPiSJElSihjwJUmSpBQx4EuSJEkpYsCXJEmSUsSAL0mSJKVImw/4IYQBIYTbQwhLQgibQgiLQwg3hBB238lxemWuW5wZZ0lm3AGFql2F09LPRQihawjhjBDCjBDCghBCdQhhbQjhpRDC90IIHQv9Myj/8vX3RYMxjwshbA0hxBDClfmsV60jn5+LEMKIzN8bf8uMtSyE8McQwtcKUbsKJ4/54pgQwszM9RtDCO+EEB4JIYwrVO3KvxDC+BDCjSGEZ0IIH2b+zr9rF8fK+3+LGn2PtvygqxDCQOB5oB8wE1gAHAEcDywERufyFN0QQu/MOAcAfwD+DAwFPgcsB46KMb5ZiJ9B+ZePz0XmL95HgVXAU8AbwO7AKUD/zPifijFuLNCPoTzL198XDcbsDswD+gDdgKtijN/PZ90qrHx+LkII55E8wX018Hvg70AvYBjwtxjjl/P+A6gg8pgvvgncDFQDDwF/AwYAnwcqge/HGK8qxM+g/AohzAWGA+tI/hyHAnfHGL+6k+Pk/b9FTYoxttkvYBYQgfMbtF+faf95juP8InP+jxu0fzvT/lixf1a/WvdzARwGnAF0bNDeHZiTGed7xf5Z/Wrdz0UTY95O8kvgJZkxriz2z+lXcT4XwBigJjNe9yb6OxT7Z/WrdT8XQAdgDbABGNKg70BgI7Ae/n979xYqVRXHcfz7N8tMza5a0OWAevJBLYpKFMxDcAoiFC8kpWTWQ1REgW9BGBg91INCPUkn1KLIIIOMkm5mkkWSCZGXLlqQt1C7WKThv4e1hqbTzDmemTV7z97n94HN4uw9s2Zt5+/e/1l7rb0Zlvf+ajmtmOgCJgAGzIxx8GID9SQ/F9VaCtuDH38BfQPsBca5+6mqbaOA/YQvYYy7H++jnpGEXvpTwKXu/lvVtiHAd8CV8TPUi9/mUsVFP59xJ/AS8Ka73950o6XlWhEXZjYLWA8sAoYCL6Ae/EJJGRdm9iUwHrjCU/S+SW4S5hdjgQPADne/usb2HcBk4CLFTLGY2UzC1f0B9eBnkaNUFHkMflcsN1b/AwHEJH0L4fLX1H7qmQoMB7ZUJ/exnkpvTPXnSXtLFRd9ORnLv5uoQ7KVNC7MbAywCljv7g2NwZS2kCQuzGwSMAXYCBwxsy4zWxrn69wcO4ukOFIdLw4Bh4FOM5tQvcHMOgm9wduV3A8qWeQoQLET/KtiubvO9j2x7MyoHmkPWXyfS2L5dhN1SLZSx8UqwvHz/mYaJblLFRfXx/IQ8CFhLtfTwDPAu8B2MxvfeDMlY0niwsMQiQcJx4ptZrbazJ4yszWEoZ5fAfMTtFeKI7Occ2izFeRodCx/qbO9sv68jOqR9tDS7zNOorsV2E4Yfy3FkCwuzGwJYbL1He5+MEHbJD+p4mJMLO8lTKy9DfgYGAs8DiwENpjZZHc/0XhzJSPJjhfuvs7MfgJeBqrvpHSQMKxPQ38Hl8xyziL34ItkyszmACsIYyrnuvvJft4iJWNmHYQYWOfur+bbGmkjlXPpGcACd3/L3X919z2EpO5zQo/c3LwaKPkws4WEqzibCRNrz4nle8CzwCv5tU7KrMgJfuVXzug62yvrj2VUj7SHlnyfZjabcCA+BMzUhOvCSRUXPYQ7YjyQolGSu1RxUdl+wN0/qd4Qh2m8Ef+8YcAtlDwkiYs4zr6HMBRnkbvvdPc/3X0nYXL+NmB+nLApg0NmOWeRE/xdsaw3TqkyoaXeOKfU9Uh7SP59mtl8YB3hkupN7r6rn7dI+0kVF9cShmMcjg85cTNzwqV2gMfiuvXNNVcykvo8Uu+kfDSWw0+zXZKvVHHRTbhV5qYaEypPAR/FP69rpJFSSJnlnEUeg/9BLLvNbEiNWw1NJ9xfdms/9Wwl9MhNN7NRNW6T2d3r86S9pYqLynvuAlYTxtV2qee+sFLFxRrCJfbeJgAzCHMztgFfNN1iyULK88hxoMPMRtS4vd2kWH6foM3SeqniYlgsL66zvbJe8zIGj6Q5Sl8K24Pv7t8SbknWQZilETEmtQAAAl1JREFUXu0JYASwtvpAa2YTzWxir3p+B9bG1y/rVc9Dsf53lNgVQ6q4iOvvJiR0PwAzFAPFlfB48bC739d74d8e/A1x3XMt2xlJJmFc/AE8D5wNLDczq3r9ZGAx4ba6r6XfC0kt4XlkcyznmdmU6g1mdg0wj/Bgo/fTtV7agZmdGWNiXPX6RmKr4TYU9UFXUPNxv18DNxLuM7obmFZ9f9l4KR13t171XBjr6ST8R/uMMAlmFmHM9bT4pUgBpIgLM+siTIwaQhhD+WONjzrm7itatBuSWKrjRZ26F6MHXRVSwvPIucAmwlOwPyXcz3osMIcwNOcRd1/Z6v2RNBLGRQ9wD6GX/nVgHyG5mw2cBaxw90dbvDuSQJyLNzv+eQlwC+EuSJUfcj+7+9L42g7CFbt97t7Rq54BxVbDUjwON88FuJxwYt1P+A+0j3CXi/NrvNaJc55qbLsAWBnffyLW1wNclvc+ask+Lgg9bt7Psjfv/dSSbVz0UW8lXpbnvY9a8osLYCTwJOEk/RdhTP5GoDvvfdSST1wQnkq6mPB8hKOEKzlHCHfRWZD3PmoZUDwsO92cgPAjrm6eMJDYanQpdA++iIiIiIj8V2HH4IuIiIiIyP8pwRcRERERKREl+CIiIiIiJaIEX0RERESkRJTgi4iIiIiUiBJ8EREREZESUYIvIiIiIlIiSvBFREREREpECb6IiIiISIkowRcRERERKREl+CIiIiIiJaIEX0RERESkRJTgi4iIiIiUiBJ8EREREZESUYIvIiIiIlIiSvBFREREREpECb6IiIiISIn8A+XKk5FNJHR0AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 252,
       "width": 380
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from pymoo.factory import get_crossover\n",
    "from pymoo.interface import crossover\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "c = np.array([[0.8, 0.2]])\n",
    "a = np.array([[0.4, 0.4]])\n",
    "b = np.array([[0.6, 0.5]])\n",
    "\n",
    "X = crossover(get_crossover(\"real_de\", weight=0.0, dither='vector'),\n",
    "              a.repeat(100, axis=0), b.repeat(100, axis=0), c.repeat(100, axis=0))\n",
    "\n",
    "plt.scatter(X[:, 0], X[:, 1], s=20,facecolors='none', edgecolors='r', label=\"v\")\n",
    "plt.scatter(a[:, 0], a[:, 1], label=\"$x_{\\pi_1}$\", marker=\"X\")\n",
    "plt.scatter(b[:, 0], b[:, 1], label=\"$x_{\\pi_2}$\", marker=\"X\")\n",
    "plt.scatter(c[:, 0], c[:, 1], label=\"$x_{\\pi_3}$\", marker=\"X\")\n",
    "\n",
    "plt.xlim(0, 1)\n",
    "plt.ylim(0, 1)\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### API"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. autofunction:: pymoo.factory.get_crossover\n",
    "    :noindex:\n",
    "\n",
    ".. autofunction:: pymoo.model.crossover.Crossover\n",
    "    :noindex:"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Raw Cell Format",
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
